package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//标准库中的线程池中的线程呢 是一个前台线程，不会正常的进行结束
public class Demo25 {
    //线程池的简单使用
    //我们的标准库中的线程池是 Executors 是由工厂模式简化的 ThreadPoolExecutor这个线程池
    //来看看如何使用
    public static void main(String[] args) {
        ExecutorService threadPool1 = Executors.newFixedThreadPool(5);
        //指定线程池中的线程的个数是多少，也就是ThreadPoolExecutor线程池中的 核心线程数和最大线程数相等
        ExecutorService threadPool2 = Executors.newCachedThreadPool();
        //这个的最大线程数是非常大的，不是确定的线程数

        //这两个创建线程池的方法是最重要的方法
        //我们使用 submit 进行任务的传递
        for (int i = 0; i < 1000; i++) {
            int x = i;
            threadPool1.submit(() -> {
                System.out.println("hello " + x + ", " + Thread.currentThread().getName());
            });
        }
        //如果想要这个线程池结束的话，我们可以使用 shutdown
        //对于 shutdown 来说能够把线程池里的线程全部关闭，但是不能保证线程池内的任务一定能全部执行完毕。
        //所以，如果需要等待线程池内的任务全部执行完毕，需要调用 awaitTermination 方法。
        threadPool1.shutdown();
    }
}
